package com.annotation.configure;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 *  自动装配：
 *     Spring 利用依赖注入（DI） ,完成对IOC容器中各个组件的相互依赖的关系负值
 *
 *     1）@Autowired  自动装配一定要将属性赋值好，没有就会报错   @Qualifier("book2")  假如IOC容器当中有多个类型的book,优先装配book2,当@Autowired(required=false) 的情况
 *     下，属性有赋值就赋值，没有的话也不报错
 *     2） @Autowired可以装配到构造器，方法上面，标注到方法上，Spring容器就会调用方法，完成赋值，放在构造器上，完成有参构造器的赋值，如果bean只有一个构造器，那么可以不使用@Autowired  ，IOC容器来找。@Autowired默认启动会调用无参构造器创建对象，再进行初始化赋值，标注到构造器上，只有一个构造器，那么可以省略
 *
 *     3）Spring 还支持使用@Resouce 和@Inject注解进行注入  （java规范）
 *
 *    4）自定义组件想使用Spring容器的一些底层组件（ApplicationContext,beanFactory...） ,只要自定义组件实现xxxAware,在创建对象的时候，就可以把接口规范的组件注入到相关组件；Aware的设计
 *
 *
 *
 *
 *
 *     AutowiredAnnotationBeanPostProcessor：解析完成自动装配功能。
 *
 * @Primary 注解，首选装配哪个
 */
@Configuration
@ComponentScan({"com.annotation.controller","com.annotation.service","com.annotation.dao"})
public class TestConfigAutoWired {

//
//    @Bean("testDao")
//    public TestDao testDao(){
//        return   new TestDao("张三");
//    }


}
